//package com.zwz.utils;
//
//import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
//import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
//import org.apache.hc.client5.http.impl.classic.HttpClients;
//import org.apache.http.client.methods.CloseableHttpResponse;
//import org.apache.http.client.methods.HttpGet;
//import org.apache.http.impl.client.CloseableHttpClient;
//import org.apache.http.impl.client.HttpClients;
//import org.apache.http.util.EntityUtils;
//import com.fasterxml.jackson.databind.ObjectMapper;
//
//import java.io.IOException;
//import java.util.List;
//import java.util.Map;
//
//public class RangePaginationCrawler {
//
//    // 接口基础URL（已包含固定参数）
//    private static final String BASE_URL = "https://sales.tungee.com/api/unlock-leads-call?sort_field=create_time&sort=-1";
//
//    // 每页获取记录数
//    private static final int PAGE_SIZE = 100;
//
//    // 定义API响应结构（根据实际JSON结构调整）
//    private static class ApiResponse {
//        public int code;
//        public String msg;
//        public DataBody data;
//
//        static class DataBody {
//            public int total;
//            public List<Map<String, Object>> list;
//        }
//    }
//
//    public static void main(String[] args) {
//        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
//            // 1. 获取总记录数
//            int totalRecords = fetchTotalRecords(httpClient);
//            System.out.println("Total records: " + totalRecords);
//
//            // 2. 分页爬取数据
//            for (int begin = 0; begin < totalRecords; begin += PAGE_SIZE) {
//                int end = Math.min(begin + PAGE_SIZE - 1, totalRecords - 1);
//                String url = buildUrl(begin, end);
//
//                System.out.println("Fetching: " + url);
//
//                // 发送请求并处理响应
//                List<Map<String, Object>> pageData = fetchPageData(httpClient, url);
//                if (pageData.isEmpty()) break;
//
//                // 处理数据（示例：打印记录数）
//                System.out.println("Got " + pageData.size() + " items");
//                processData(pageData);
//
//                // 请求间隔（避免封禁）
//                Thread.sleep(1500);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /** 构造带分页参数的URL */
////    private static String buildUrl(int begin, int end) {
////        return BASE_URL + "&begin=" + begin + "&end=" + end;
////    }
//
//    /** 获取总记录数 */
//    private static int fetchTotalRecords(CloseableHttpClient httpClient) throws IOException {
//        // 首次请求获取总记录数（begin=0&end=0通常返回第一页数据+总数）
//        String initialUrl = buildUrl(0, 0);
//
//        try (CloseableHttpResponse response = httpClient.execute(new HttpGet(initialUrl))) {
//            String json = EntityUtils.toString(response.getEntity());
//            ApiResponse result = new ObjectMapper().readValue(json, ApiResponse.class);
//            return result.data.total;
//        }
//    }
//
//    /** 获取单页数据 */
//    private static List<Map<String, Object>> fetchPageData(CloseableHttpClient httpClient, String url) throws IOException {
//        HttpGet request = new HttpGet(url);
//        // 设置请求头（根据实际情况补充）
//        request.setHeader("User-Agent", "Mozilla/5.0");
//        request.setHeader("Accept", "application/json");
//
//        try (CloseableHttpResponse response = httpClient.execute(request)) {
//            String json = EntityUtils.toString(response.getEntity());
//            ApiResponse result = new ObjectMapper().readValue(json, ApiResponse.class);
//            return result.data.list;
//        }
//    }
//
//    /** 数据处理示例 */
//    private static void processData(List<Map<String, Object>> data) {
//        // 实际业务处理逻辑（如存储到数据库）
//        data.forEach(item -> {
//            // 示例：打印ID和创建时间
//            System.out.println("ID: " + item.get("id")
//                    + ", CreateTime: " + item.get("create_time"));
//        });
//    }
//}